package vue;

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.ImageObserver;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;

import modele.ObjetSimple;
import modele.Serie;
import data.Bd;

public class SerieFrm extends JDialog {
	
	/**
	 * ID de la form
	 */
	private static final long serialVersionUID = 1L;
    
    /**
     * Objet courant
     */
	Serie serie;
    
    /**
     * Vrai si la fenêtre a fermé avec le bouton Sauvegarder
     */
    boolean sauvegarde = false;

	private final JPanel contentPanel = new JPanel();
	private final JButton btnEnregistrer = new JButton("Enregistrer");
	private final JButton btnAnnuler = new JButton("Annuler");
	private JLabel lblImage = new JLabel("");
	private JTextField txtTitre = new JTextField();;
	private final JTextField txtTitreO = new JTextField();
	private final JLabel lblTitreOriginal = new JLabel("Titre original");
	private final JLabel lblAuteur = new JLabel("Auteur");
	private final JLabel lblDessinateur = new JLabel("Dessinateur");
	private final JLabel lblType = new JLabel("Type");
	private final JLabel lblGenre = new JLabel("Genre");
	private final JLabel lbldition = new JLabel("Édition");
	private final JLabel lblPays = new JLabel("Pays");
	private final JLabel lblNbVolumes = new JLabel("Nb volumes");
	private final JLabel lblNbVolumesOriginal = new JLabel("Nb volumes original");
	private final JLabel lblAgeConseill = new JLabel("Age conseillé");
	JComboBox<ObjetSimple> cmbAuteur = new JComboBox<ObjetSimple>();
	JComboBox<ObjetSimple> cmbDessinateur = new JComboBox<ObjetSimple>();
	JComboBox<ObjetSimple> cmbType = new JComboBox<ObjetSimple>();
	JComboBox<ObjetSimple> cmbGenre = new JComboBox<ObjetSimple>();
	JComboBox<ObjetSimple> cmbEdition = new JComboBox<ObjetSimple>();
	JComboBox<ObjetSimple> cmbPays = new JComboBox<ObjetSimple>();
	JSpinner txtNbVolume = new JSpinner();
	JSpinner txtNbVolumeO = new JSpinner();
	JSpinner txtAge = new JSpinner();
	Canvas canvasImage = new Canvas();
	Graphics imageGraphic = canvasImage.getGraphics();
	Image image = null;
	File imageFile = null;
	JLabel lblTitre = new JLabel("Titre");
	
	/**
     * Affiche la fenêtre pour créer un nouveau Auteur
     * @param bd BD courante pour ajouter le nouveau Auteur
     * @return Vrai si l'ajout a fonctionné
     */
    public Serie creer() {
        this.serie = new Serie();
        
        this.setVisible(true);
        
        if (this.sauvegarde == true) {
        	if (image == null) {
        		try {
        			imageFile = new File("lib/blackSquare.gif");
					image = ImageIO.read(imageFile);
				} catch (IOException e) {
					new JOptionPane();
					JOptionPane.showMessageDialog(null, "Erreur au chargement de l'image", "Erreur", JOptionPane.WARNING_MESSAGE, null);
					return null;
				}
        	}
        	this.serie.image = image;
        	if (imageFile != null)
        		this.serie.imageFile = imageFile;
        	this.serie.age_conseille = (Integer)txtAge.getValue();
        	this.serie.auteur = (ObjetSimple)cmbAuteur.getSelectedItem();
        	this.serie.dessinateur = (ObjetSimple)cmbDessinateur.getSelectedItem();
        	this.serie.edition = (ObjetSimple)cmbEdition.getSelectedItem();
        	this.serie.genre = (ObjetSimple)cmbGenre.getSelectedItem();
        	this.serie.nb_volumes = (Integer)txtNbVolume.getValue();
        	this.serie.nb_volumes_original = (Integer)txtNbVolumeO.getValue();
        	this.serie.pays = (ObjetSimple)cmbPays.getSelectedItem();
        	this.serie.titre = txtTitre.getText();
        	this.serie.titre_original = txtTitreO.getText();
        	this.serie.type = (ObjetSimple)cmbType.getSelectedItem();
        	return this.serie;
        }
        else {
        	return null;
        }
    }
    
    /**
     * Affiche la fenêtre pour modifier le Auteur
     * @param bd BD courante
     * @param Auteur Auteur a modifier
     * @return Vrai si la modification a fonctionné
     */
    public boolean modifier(Serie objet) {
        this.serie = objet;
        
        txtAge.setValue(this.serie.age_conseille);
        cmbAuteur.setSelectedItem(this.serie.auteur);
        cmbDessinateur.setSelectedItem(this.serie.dessinateur);
        cmbEdition.setSelectedItem(this.serie.edition);
        cmbGenre.setSelectedItem(this.serie.genre);
        txtNbVolume.setValue(this.serie.nb_volumes);
        txtNbVolumeO.setValue(this.serie.nb_volumes_original);
        cmbPays.setSelectedItem(this.serie.pays);
        txtTitre.setText(this.serie.titre);
        txtTitreO.setText(this.serie.titre_original);
        cmbType.setSelectedItem(this.serie.type);
        
        this.image = this.serie.image;
        
        this.setVisible(true);
        
        if (this.sauvegarde == true) {
        }
        return this.sauvegarde;
    }

	/**
	 * Create the dialog.
	 */
	public SerieFrm(Bd database) {
		txtTitreO.setBounds(125, 43, 114, 19);
		txtTitreO.setColumns(10);
		setModal(true);
		setTitle("Manga");
		setBounds(100, 100, 427, 408);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(null);
		btnEnregistrer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				sauvegarde = true;
		        dispose();
			}
		});
		btnEnregistrer.setBounds(282, 289, 117, 25);
		
		contentPanel.add(btnEnregistrer);
		btnAnnuler.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				sauvegarde = false;
		        dispose();
			}
		});
		btnAnnuler.setForeground(Color.RED);
		btnAnnuler.setBounds(282, 326, 117, 25);
		
		contentPanel.add(btnAnnuler);
		contentPanel.add(lblImage);
		
		canvasImage.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				JFileChooser fileChooser = new JFileChooser();
				FileFilter images = new FileNameExtensionFilter("images", "jpg");
				fileChooser.setAcceptAllFileFilterUsed(false);
				fileChooser.addChoosableFileFilter(images);
				int ret = fileChooser.showDialog(null, "Open file");

			    if (ret == JFileChooser.APPROVE_OPTION) {
			    	imageFile = fileChooser.getSelectedFile();
			    	try {
						image = ImageIO.read(imageFile);
						imageGraphic = canvasImage.getGraphics();
				    	imageGraphic.drawImage(image, 0, 0, 88, 130, Color.white, new ImageObserver() {
							
							@Override
							public boolean imageUpdate(Image img, int infoflags, int x, int y,
									int width, int height) {
								// TODO Auto-generated method stub
								return false;
							}
						});
					} catch (IOException e1) {
						e1.printStackTrace();
					}
			    	
			    }
			}
		});
		canvasImage.setBackground(Color.BLACK);
		canvasImage.setBounds(311, 10, 88, 130);
		contentPanel.add(canvasImage);
		
		txtTitre.setBounds(125, 14, 114, 19);
		contentPanel.add(txtTitre);
		txtTitre.setColumns(10);
		
		lblTitre.setBounds(12, 16, 70, 15);
		contentPanel.add(lblTitre);
		
		contentPanel.add(txtTitreO);
		lblTitreOriginal.setBounds(12, 45, 95, 15);
		
		contentPanel.add(lblTitreOriginal);
		lblAuteur.setBounds(12, 77, 70, 15);
		
		contentPanel.add(lblAuteur);
		lblDessinateur.setBounds(12, 111, 95, 15);
		
		contentPanel.add(lblDessinateur);
		lblType.setBounds(12, 145, 70, 15);
		
		contentPanel.add(lblType);
		lblGenre.setBounds(12, 179, 70, 15);
		
		contentPanel.add(lblGenre);
		lbldition.setBounds(12, 213, 70, 15);
		
		contentPanel.add(lbldition);
		lblPays.setBounds(12, 247, 70, 15);
		
		contentPanel.add(lblPays);
		lblNbVolumes.setBounds(12, 278, 95, 15);
		
		contentPanel.add(lblNbVolumes);
		lblNbVolumesOriginal.setBounds(12, 308, 117, 15);
		
		contentPanel.add(lblNbVolumesOriginal);
		lblAgeConseill.setBounds(12, 336, 108, 15);
		
		contentPanel.add(lblAgeConseill);
		
		cmbAuteur.setBounds(125, 72, 114, 24);
		if (database.getAuteurs().count() > 0)
			for (ObjetSimple objet : database.getAuteurs().getAllList())
				cmbAuteur.addItem(objet);
		contentPanel.add(cmbAuteur);
		
		cmbDessinateur.setBounds(125, 106, 114, 24);
		if (database.getAuteurs().count() > 0)
			for (ObjetSimple objet : database.getAuteurs().getAllList())
				cmbDessinateur.addItem(objet);
		contentPanel.add(cmbDessinateur);
		
		cmbType.setBounds(125, 140, 114, 24);
		if (database.getTypes().count() > 0)
			for (ObjetSimple objet : database.getTypes().getAllList())
				cmbType.addItem(objet);
		contentPanel.add(cmbType);
		
		cmbGenre.setBounds(125, 174, 114, 24);
		if (database.getGenres().count() > 0)
			for (ObjetSimple objet : database.getGenres().getAllList())
				cmbGenre.addItem(objet);
		contentPanel.add(cmbGenre);
		
		cmbEdition.setBounds(125, 208, 114, 24);
		if (database.getEditeurs().count() > 0)
			for (ObjetSimple objet : database.getEditeurs().getAllList())
				cmbEdition.addItem(objet);
		contentPanel.add(cmbEdition);
		
		cmbPays.setBounds(125, 242, 114, 24);
		if (database.getPays().count() > 0)
			for (ObjetSimple objet : database.getPays().getAllList())
				cmbPays.addItem(objet);
		contentPanel.add(cmbPays);
		
		txtNbVolume.setBounds(125, 276, 114, 20);
		contentPanel.add(txtNbVolume);
		
		txtNbVolumeO.setBounds(125, 306, 114, 20);
		contentPanel.add(txtNbVolumeO);
		
		txtAge.setBounds(125, 336, 114, 20);
		contentPanel.add(txtAge);
	}
}
